namespace Gma.QrCodeNet.Encoding.DataEncodation;

public static class CharCountIndicatorTable
{
	/// <remarks>ISO/IEC 18004:2000 Table 3 Page 18</remarks>
	public static int[] GetCharCountIndicatorSet()
	{
		return new int[] { 8, 16, 16 };
	}

	public static int GetBitCountInCharCountIndicator(int version)
	{
		int[] charCountIndicatorSet = GetCharCountIndicatorSet();
		int versionGroup = GetVersionGroup(version);

		return charCountIndicatorSet[versionGroup];
	}

	/// <summary>
	/// Used to define length of the Character Count Indicator <see cref="GetBitCountInCharCountIndicator"/>
	/// </summary>
	/// <returns>Returns the 0 based index of the row from Chapter 8.4 Data encodation, Table 3 — Number of bits in Character Count Indicator. </returns>
	private static int GetVersionGroup(int version)
	{
		if (version > 40)
		{
			throw new InvalidOperationException($"Unexpected version: {version}.");
		}
		else if (version >= 27)
		{
			return 2;
		}
		else if (version >= 10)
		{
			return 1;
		}
		else if (version > 0)
		{
			return 0;
		}
		else
		{
			throw new InvalidOperationException($"Unexpected version: {version}.");
		}
	}
}
